<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 创建对象的方式：

    // 1：new Object
    // var  person = new Object()

    // person.name = "lisi"
    // person.age = 19
    // person.say = function () {
    //     alert(this.name)
    // }
    // console.log(person)
    // 2:字面量方式
    // var person = {
    //     name :"lisi" ,
    //     age : 19,
    //     say(){
    //         alert(this.name)
    //     }
    // }

    // console.log(person)
    // 3：工厂模式创建对象      设计模式：单例模式   发布者-订阅者模式   
    // function  CreatePerson(name,age,family){
    //     let o = new Object();
    //     o.name = name;
    //     o.age = age;
    //     o.family = family;
    //     o.say = function(){
    //         alert(this.name)
    //     }

    //     return o;
    // }



    // var person1 = CreatePerson("lisi",19,["King","queen","tom"])
    // person1.say();
    // var person2 = CreatePerson("wangwu",29,["jack","queen","tom"])
    // person2.say();

    // 创造出大批类似的对象

    // 4：构造函数模式  

    // function Person(name,age,family) {
    //     this.name = name;
    //     this.age = age;
    //     this.family = family;
    //     this.say =  function () {
    //         alert(this.name)
    //     }
    // }

    // var person1 = new Person("lisi",19,["King","queen","tom"])
    // person1.say();
    // var person2 = new Person("wangwu",29,["jack","queen","tom"])
    // person2.say();


    // 5：原型模式    

    // function Person() {

    // }

    // Person.prototype.name = "LISI"
    // Person.prototype.say = function () {
    //     alert(this.name)
    // }

    // var person1 = new Person()
    // console.log(person1.name)
    // person1.say()

    //创建对象  6：混合模式 构造函数+原型模型
    // 构造函数
    // function User(name,password){
    //     this.name = name;
    //     this.password = password;
    // }

    // // 方法写到原型上
    // User.prototype.showName = function(){
    //     console.log(this.name)
    // }
    // User.prototype.showPassword = function(){
    //     console.log(this.password)
    // }

    // var u1 = new User("king",123456)
    // u1.showName()
    // u1.showPassword()
    // var u2 = new User("queen",111111)
    // u2.showName()
    // u2.showPassword()



    // 构造函数  构建创造对象时调用的函数  但是构造函数只能调用一次  作用是给对象做初始化   普通函数 功能的封装  能多次调用  


    /**/


    class User {//类   本质  函数
        //    constructor(){//构造器

        //    }
        constructor(name) {//构造器
            this.name = name;
        }
        //    constructor(name,password){//构造器
        //     this.name = name;
        //     this.password = password;
        //    }
        showName() {
            console.log(this.name)
        }
        showPassword() {
            console.log(this.password)
        }

    }

    var u1 = new User("king", 123456)
    u1.showName()
    u1.showPassword()
    console.log(typeof u1)
    console.log(typeof User)


// ts 按照类方式写

</script>

</html>